package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import modelo.Categoria;
import modelo.Produto;

public class CategoriasDAO {

	private final Connection con;

	public CategoriasDAO(Connection con) {
		this.con = con;
	}
	
	public List<Categoria> listaComProdutos()  throws SQLException {
		
		List<Categoria> listaCategorias = new ArrayList<>();
		Categoria ultimaCat = null;
		
		String sql = "SELECT QRY1.CATEGORIAID, QRY1.NOME, QRY1.DESCRICAO, QRY2.PRODUTOSID PROD_ID, QRY2.NOME PROD_NOME, QRY2.DESCRICAO PROD_DESCRICAO  FROM A_CATEGORIA$ QRY1, A_PRODUTOS$ QRY2 WHERE QRY1.CATEGORIAID = QRY2.CATEGORIAID";
		try(PreparedStatement stmt = con.prepareStatement(sql)){
			stmt.execute();
			
			try(ResultSet rs = stmt.getResultSet()){
				while( rs.next() ){
	                int     id        = rs.getInt   ("CATEGORIAID");  
	                String  nome      = rs.getString("NOME");     
	                String  descricao = rs.getString("DESCRICAO"); 
	                
	                // se for "==" null  || e "!" diferente da atual
	                if (ultimaCat ==null || !ultimaCat.getNome().equals(nome) ) {
		 				Categoria categoria = new Categoria(id, nome, descricao);	 				
		 				listaCategorias.add(categoria);		
		 				ultimaCat = categoria;
					}
	                
	                int    idDoProduto        = rs.getInt   ("PROD_ID"); 
	                String nomeDoProduto      = rs.getString("PROD_NOME");
	                String descricaoDoProduto = rs.getString("PROD_DESCRICAO");
	                Produto p = new Produto(nomeDoProduto, descricaoDoProduto);
	                p.setId(idDoProduto);
	                
	                ultimaCat.adiciona(p);  
				}

			}
			
		}
		return listaCategorias;
	}



}
